<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>06js函数</title>
</head>
<body>
<script>
  //1.js通过function关键字来定义函数,java共有53个关键字,其中包括51个关键字和2个保留字,const和goto
  function f1(){
    //方法体
    console.log('f1');
  }
  f1();

  //2.函数参数
  function f2(n){
    console.log('今天星期六' + n);
  }
  //弱类型
  f2('中午吃什么');
  f2(666);
  f2(false);

  function f3(x, y){
    console.log(x + y);
  }
  f3(3, 10);
  //结果:NaN 声明了一个变量但是未赋值,结果为Undefined,即:3+Undefined=NaN;
  //如果实参个数<形参个数,未被赋值的形参会被赋值为Undefined;
  f3(3);
  //如果实参个数>形参个数,则多的实参会被忽略掉,所以结果为13;
  f3(3,10,20);

  function f4(){
    console.log(arguments);
  }
  f4(50);//[50,...]
  f4(50, 60);//[50,60,...]
  f4(50, 60, 70);//[50,60,70,...]

  //5.函数的返回值
  function f5(a, b){
    return a + b;
  }
  var result = f5(1, 6);
  //此处和java代码完全一样
  console.log(result);
  console.log(f5(2, 8));

  //函数的第2种声明方式: 将整个函数交给f6()来保存
  var f6 = function () {
    console.log('第2种');
  }
  console.log(f6);
  console.log(typeof f6);
  //调用函数和之前一样
  f6();

  //第3种:箭头函数[把function关键字省略了]
  //推荐使用const,因为const是常量,定义之后不能够被更改了,可以防止函数被无意间更改
  //处于不可以被更改或者块级作用域,建议使用const;
  const f7 = (n)=>{
    console.log('第3种' + n);
  }
  f7(123);

  //let：基本上用不到
  let f8 = new Function('name', 'age', "console.log('方法体'+name);return age;");
  console.log(f8('xxx',18));

</script>
</body>
</html>















